import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import { viteMockServe } from 'vite-plugin-mock'
// import vueSetupExtend from 'vite-plugin-vue-setup-extend'
import { manualChunksPlugin } from 'vite-plugin-webpackchunkname'
import { visualizer } from 'rollup-plugin-visualizer'

import { resolve } from 'path'

const pathResolve = (dir: string) => resolve(__dirname, dir)

// https://vitejs.dev/config/
export default ({ command, mode }) => {
  const viteEnv = loadEnv(mode, process.cwd())
  const isPord = viteEnv.VITE_NODE_ENV === 'production'
  console.info(viteEnv)

  return defineConfig({
    plugins: [
      vue(),
      visualizer({
        open: false, // 在默认用户代理中打开生成的文件
        gzipSize: true,
        brotliSize: true
      }),
      vueJsx(), // support JSX
      // vueSetupExtend(), // support name
      manualChunksPlugin(), // 导致vueSetupExtend配置name在生产上无效
      viteMockServe({
        mockPath: 'mock', // 解析位置
        localEnabled: process.env.MOCK === 'true' ? true : false // 是否开启开发环境
      })
    ],
    css: {
      preprocessorOptions: {
        less: {
          modifyVars: {
            'primary-color': '#4AA353',
            'primary-color-light': '#ebfeec',
            'primary-color-hover': '#5DC966',
            'primary-color-active': '#377E43',
            'success-color': '#5DC966',
            'warning-color': '#D7802E',
            'error-color': '#C72A2A',
            'text-color': '#192235',
            'border-color-base': '#cdcdcd',
            'btn-default-border': '#B6B6B6',
            'text-color-secondary': '#555d6f',
            'table-border-color': '#E0E1E6'
          },
          // additionalData: `@import "${resolve(__dirname, 'src/styles/variables.less')}";`,
          javascriptEnabled: true
        }
      }
    },
    resolve: {
      alias: {
        '@': pathResolve('./src') // 设置 `@` 指向 `src` 目录
      }
    },
    esbuild: {
      drop: isPord ? ['console', 'debugger'] : [] // 去除console
    },
    build: {
      chunkSizeWarningLimit: 3000,
      rollupOptions: {
        output: {
          manualChunks(id) {
            if (id.indexOf('node_modules/ant-design-vue/') !== -1) {
              return 'componentLibrary'
            }
            // if (id.includes('node_modules')) {
            //   return id.toString().split('node_modules/')[1].split('/')[0].toString()
            // }
          },
          entryFileNames: 'js/[name].[hash].js', // 用于命名代码拆分时创建的共享块的输出命名
          chunkFileNames: 'js/[name].[hash].js', // 用于输出静态资源的命名，[ext]表示文件扩展名
          assetFileNames: '[ext]/[name].[hash].[ext]' // 拆分js到模块文件夹 // chunkFileNames: (chunkInfo) => { //     const facadeMod
        }
      }
    },

    server: {
      hmr: true,
      host: '0.0.0.0',
      // 代理设置
      proxy: {
        '/api': {
          changeOrigin: true,
          target: 'http://172.16.0.73:8088', // 测试环境
          // target: 'http://172.16.0.74:8088', // 测试环境
          // target: 'http://172.16.20.55:8001', // 伟建本地
          // target: 'http://172.16.20.52:8001', // 文宇本地
          // target: 'http://172.16.20.103:8001', // 窦康本地
          rewrite: (path) => path.replace(/^\/api/, '/')
        }
      }
    }
  })
}
